# 一、 什么是多态
"""
* 多态指的是多种状态，即完成某个行为时，使用不同的对象会得到不同的结果

* 多态常用在 继承 + 复写
1. 函数形参使用父类接收
2. 实际传参使用的是子类来达到多态的效果
"""


class Animal:
    def speak(self):
        pass

class Dog:
    def speak(self):
        print("汪汪汪")

class Cat:
    def speak(self):
        print("喵喵喵")

def make_noise(animal: Animal):
    animal.speak()

dog = Dog()
cat = Cat()

make_noise(dog)
make_noise(cat)

# 二、抽象类（接口）
"""
如上，父类Animal中的speak是空实现(什么也没实现)，这种设计的含义是:
1. 父类来确定有哪些方法
2. 具体的方法实现，由子类自行决定（复写）
因此，这种写法就叫做抽象类，也称之为接口

抽象方法: 空实现的函数
抽象类: 含有抽象方法的类

抽象类就好比定义了一个标准，包含了一些抽象方法, 要求子类必须实现
"""
class AC:
    def cool_wind(self):
        pass

    def hot_wind(self):
        pass

    def swing_l_r(self):
        pass

    def say_hello(self):
        print("我是父类AC")

class Midea_AC(AC):
    def cool_wind(self):
        print("美的空调的制冷")
    def hot_wind(self):
        print("美的空调的制热")
    def swing_l_r(self):
        print("美的空调的左右摆风")

class GREE_AC(AC):
    def cool_wind(self):
        print("格力空调的制冷")
    def hot_wind(self):
        print("格力空调的制热")
    def swing_l_r(self):
        print("格力空调的左右摆风")

def make_cool(ac: AC):
    ac.cool_wind()

md = Midea_AC()
make_cool(md)

gl = GREE_AC()
make_cool(gl)


